/**
 * 项目名：	Rumba Plan
 * 
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 文件名：	ISQLReader.java
 * 模块说明：	
 * 修改历史：
 * 2007-2-27 - lxm - 创建。
 */
package com.hd123.rumba.upgrade;

import com.hd123.rumba.exception.BusinessException;

/**
 * 定义一个接口。从字符串输入流中读取SQL脚本，按照提交DBMS的需要缓冲SQL语句块，提供语句块的高效读取。
 * <p>
 * 要求这个SQL脚本带有rumba升级标记，所谓“rumba升级标记”请参见有关说明文档。
 * 
 * @author lxm
 * 
 */
public interface ISQLReader {

  /**
   * 关闭该流。
   * 
   * @throws BusinessException
   */
  public void close() throws BusinessException;

  /**
   * 读取下一个SQL语句块。
   * 
   * @return 返回读取的SQL语句块。若已达到流的末尾，则返回null。
   * @throws BusinessException
   */
  public SQLBlock readBlock() throws BusinessException;

  public class SQLBlock {
    private Integer action;
    private Boolean ignore = Boolean.FALSE;
    private String message;
    private StringBuffer sqls = new StringBuffer();

    /** {@link #getAction()}的取值：表示SQL命令。 */
    public static final Integer VALUE_ACTION_COMMAND = new Integer(0);
    /** {@link #getAction()}的取值：表示需要显示{@link #getMessage()}中的信息。 */
    public static final Integer VALUE_ACTION_PROMPT = new Integer(1);

    /** 属性：动作。取值参见常量VALUE_ACTION_*。 */
    public Integer getAction() {
      return action;
    }

    public void setAction(Integer action) {
      this.action = action;
    }

    /** 属性：是否忽略错误。仅当action == VALUE_ACTION_COMMAND时有效。 */
    public Boolean getIgnore() {
      return ignore;
    }

    public void setIgnore(Boolean ignore) {
      this.ignore = ignore;
    }

    /** 属性：消息。仅当action == VALUE_ACTION_PROMPT时有效。 */
    public String getMessage() {
      return message;
    }

    public void setMessage(String message) {
      this.message = message;
    }

    /** 属性：SQL语句。仅当action == VALUE_ACTION_COMMAND时有效。 */
    public StringBuffer getSqls() {
      return sqls;
    }

    public void setSqls(StringBuffer sqls) {
      this.sqls = sqls;
    }
  }

}
